/**
 * @file      ICM20948_isr.c
 * @brief     ICM20948中断处理函数
 * @version   1.0
 * @date      2023-07-15
 */

#include "ICM20948.h"
#include "DMP/icm20948_dmp_driver.h"
#include "ti_msp_dl_config.h"
// 确保包含设备特定头文件
#include <ti/devices/msp/msp.h>
#include <ti/driverlib/dl_gpio.h>

/**
 * @brief GPIOB中断处理函数
 * 
 * 处理来自ICM20948的中断请求，包括：
 * 1. 传感器数据就绪中断
 * 2. DMP数据就绪中断
 * 3. 其他按键中断等
 */
void GPIOB_IRQHandler(void)
{
    // 获取中断状态
    uint32_t status = DL_GPIO_getInterruptStatus(GPIO_ICM20943_PORT);
    
    // 检查是否为ICM20948中断 (PIN_INT)
    if (status & GPIO_ICM20943_PIN_INT_PIN)
    {
        // 清除中断标志
        DL_GPIO_clearInterruptStatus(GPIO_ICM20943_PORT, GPIO_ICM20943_PIN_INT_PIN);
        
        // 调用ICM20948数据就绪处理函数
        ICM20948_DRDY_Handler();
        
        // 如果DMP功能已启用，也调用DMP中断处理函数
        ICM20948_DMP_InterruptHandler();
    }
    
    // 检查是否为KEY_S3按键中断
    if (status & GPIO_KEY_KEY_S3_PIN)
    {
        // 清除中断标志
        DL_GPIO_clearInterruptStatus(GPIO_ICM20943_PORT, GPIO_KEY_KEY_S3_PIN);
        
        // 按键中断处理代码(如有需要)
    }
} 